Redis 集合(Set)

集合(set)是一个字符串类型的无序集合,集合成员是唯一的,因此这意味着在集合中不可以有重复的成员数据,每个集合中最大可以存储40多亿个成员数据。通常可以通过 SADD 创建一个集合并向其添加成员(一个或多个),之后 SMEMBERS 来返回集合中的所有成员。

1
2
3
4
5
6
7
127.0.0.1:6379> SADD set_key sql mysql redis mongoDB 
(integer) 4
127.0.0.1:6379> SMEMBERS set_key
1) "mongoDB"
2) "redis"
3) "mysql"
4) "sql"
Id Name Info Command
1 SADD 创建集合并向其中添加一个或多个成员 SADD set_key sql mysql redis mongoDB
2 SINTERSTORE 将两个集合中相同的成员保存在另一个集合中 SINTERSTORE set_key set_one set_two
3 SDIFFSTORE 将两个集合中不相同的成员数据保存到另一个集合中 SDIFFSTORE set_key set_one set_two (将 set_one 和 set_two 两个集合之间不相同的成员保存到 set_key 集合中)
4 SUNIONSTORE 将两个或多个集合之间的成员进行合并到另一个集合中 SUNIONSTORE key_set set_one set_two
5 SMOVE 将一个集合中的成员移动到另一个集合中 SMOVE set_one set_two "sql" (将 set_one 集合中的成员“sql” 移动到 set_two 中)
6 SDIFF 返回指定集合中的不同成员 SDIFF set_two set_one
7 SINTER 返回指定集合中相同的成员 SINTER set_one set_two
8 SUNION 返回将指定集合合并后的并集 SUNION set_one set_two
9 SMEMBERS 返回指定集合中所有的成员 SMEMBERS set_key
10 SISMEMBER 判断集合中成员是否存在(存在返回1,不存在返回0) SISMEMBER set_one "mysql"
11 SSCAN 遍历指定集合中所存在的键元素 SSCAN set_two 0 MATCH s* (匹配该集合中所有以 “s” 开头的成员 )
12 SRANDMEMBER 随机返回指定集合中的成员数(如果数大于成员数那么将返回所有成员) SRANDMEMBER set_two 10
13 SPOP 根据指定数值随机删除集合成员,并返回所删除的成员数据 SPOP set_two 3
14 SREM 删除一个或多个集合中的成员 SREM set_two "mysql"

SINTERSTORE


SINTERSTORE 命令在 Redis 中的主要作用就是将两个集合中相同的成员数据添加到另一个集合中。

1
2
3
4
5
6
7
8
9
10
11
12
127.0.0.1:6379> SMEMBERS set_one
1) "redis"
2) "mysql"
3) "sql"
127.0.0.1:6379> SMEMBERS set_two
1) "mongoDB"
2) "mysql"
3) "redislab.com"
127.0.0.1:6379> SINTERSTORE set_key set_one set_two
(integer) 1
127.0.0.1:6379> SMEMBERS set_key
1) "mysql"

SDIFF


返回两个集合中不相同的成员数据,相同的数据将不会被输出,按照官方的意思说这个命令主要返回地一个集合与其他集合之间的差异(说人话就是将其他集合不相同的数据进行输出)

1
2
3
4
5
6
7
127.0.0.1:6379> SDIFF set_two set_one
1) "mongoDB"
2) "redislab.com"

127.0.0.1:6379> SDIFF set_one set_two
1) "redis"
2) "sql"

在集合中有两个非常重要的名词,分别是交集和差集,交集就是相同的意思,而差集就不相同的意思。

SDIFFSTORE

SDIFFSTORE 与 SDIFF 类似,但他主要的作用就是将两个集合之间的不相同数据(也就是差值)保存到另一个集合之中

1
2
3
4
5
127.0.0.1:6379> SDIFFSTORE set_key set_one set_two
(integer) 2
127.0.0.1:6379> SMEMBERS set_key
1) "redis"
2) "sql"

SINTER


SINTER 与 SDIFF 不同之处在于,SINTER 用于返回所有集合中的交集,也就是相同的成员集合。

1
2
127.0.0.1:6379> SINTER set_one set_two
1) "mysql"

SINTERSTORE

Redis 是一个考虑很全面的 key-value 数据库,因此他的命令也非常的具有针对性,该命令与 SDIFF 中的 SDIFFSTORE 非常相似,但该命令是将两个集合中的交集存储到另一个集合中:

1
2
3
4
127.0.0.1:6379> SINTERSTORE set_key set_one set_two
(integer) 1
127.0.0.1:6379> SMEMBERS set_key
1) "mysql"

SUNION


SUNION 简单来说就是将两个集合并集,也就是将两个集合合并,将相同的数据所剔除,与 SDIFF 和 SINTER 一样,分为输出和存储两个非常具有针对性的命令。

1
2
3
4
5
6
127.0.0.1:6379> SUNION set_one set_two
1) "sql"
2) "redis"
3) "mysql"
4) "mongoDB"
5) "redislab.com"

所谓“并集” 也就是将两个或多个集合成员进行合并,如果不同集合之间的成员数据相同将会被剔除。

SUNIONSTORE

SUNIONSTORE 同样集成了 SUNION 命令逻辑,只不过是将输出改为了存储,将两个或多个集合之间的成员进行并集

1
2
3
4
5
6
7
8
127.0.0.1:6379> SUNIONSTORE key_set set_one set_two
(integer) 5
127.0.0.1:6379> SMEMBERS key_set
1) "sql"
2) "redis"
3) "mysql"
4) "mongoDB"
5) "redislab.com"

本文使用《江雪分析公开知识存储库知识共享许可证》进行发布